/**
 * 先要初始化method方法
 * 然后在创建节点后再调用checkOn方法
 */

import { getValue } from "../../util/ObjectUtil.js";

/**
 * 先判断是否为标签；
 * 获取所有的属性；
 * for得到v-on:或者@ 的属性；
 * 对v-on属性进行von函数操作。
 */
export function checkOn(vm,vnode) {
    if (vnode.nodeType !=1)  return;
    let attrNames = vnode.elm.getAttributeNames();
    for (let i = 0; i < attrNames.length; i++) {
        const el = attrNames[i];
        if (el.indexOf("v-on:")==0 || el.indexOf("@")==0) {
            let event = "";
            if (el.indexOf("v-on:")==0)  event= el.split(":")[1].trim();
            else event = el.substring(1).trim();
            let key = vnode.elm.getAttribute(el).trim();
            von(vm,vnode,event,key);
        }
        
    }
}
/**
 * 先得到属性值value；
 * 如果value存在就添加监听器；
 * 但是要重新绑定this给vm实例，否则自动为dom元素，可以用bind方法
 */
function von(vm,vnode,event,key) {
    let method = getValue(vm._methods,key);
    if (method) {
        vnode.elm.addEventListener(event,method.bind(vm));
    }
}
